// to unit `m`
export function cpuUnitConvert(value) {
  if (value.indexOf("u") !== -1) {
    return Number((Number(value.replace("u", "")) / 1000000000).toFixed(2));
  } else if (value.indexOf("n") !== -1) {
    return Number((Number(value.replace("n", "")) / 1000000).toFixed(2));
  } else if (value.indexOf("m") !== -1) {
    return Number(value.replace("m", ""));
  } else {
    return Number(value) * 1000;
  }
}

// to unit `Mi`
export function memoryUnitConvert(value) {
  value = `${value}`;
  if (value.indexOf("Ki") !== -1) {
    return Number((Number(value.replace("Ki", "")) / 1024).toFixed(2));
  } else if (value.indexOf("Mi") !== -1) {
    return Number(value.replace("Mi", ""));
  } else if (value.indexOf("Gi") !== -1) {
    return Number(value.replace("Gi", "")) * 1024;
  } else if (!isNaN(parseFloat(value)) && isFinite(value)) {
    // 如果value是一个纯数字，则以字节为单位的，并转换为MiB
    return Number((value / 1024 / 1024).toFixed(2));
  } else if (value.indexOf("G") !== -1) {
    return Number(value.replace("G", "")) * 1000;
  } else if (value.indexOf("m") !== -1) {
    return Number(value.replace("m", "")) / 1000.0 / 1024.0 / 1024.0;
  } else if (value.indexOf("M") !== -1) {
    return (Number(value.replace("M", "")) * 1024.0) / 1000.0;
  } else {
    return Number(value);
  }
}

export function numberConvert(value) {
  if (value.indexOf("k") !== -1) {
    return Number((Number(value.replace("k", "")) * 1000).toFixed(2));
  } else {
    return Number(value);
  }
}

export const mCpuFormatFixed = (value: string) => {
  const inv = mCpuFormat(value);
  return `${(inv / 1000).toFixed(2)}`;
};

// 299424874n
// 001000000
export function mCpuFormat(value) {
  if (value == null) {
    return "";
  }
  value = `${value}`;
  if (value.indexOf("u") !== -1) {
    return (Number(value.replace("u", "")) / 1000000000).toFixed(2);
  } else if (value.indexOf("n") !== -1) {
    return (Number(value.replace("n", "")) / 1000000).toFixed(2);
  } else if (value.indexOf("m") !== -1) {
    return value.replace("m", "");
  } else {
    return Number(value) * 1000;
  }
}

export function CpuFormat(value) {
  if (value == null) {
    return "";
  }
  if (value.indexOf("u") !== -1) {
    return (Number(value.replace("u", "")) / 1000000000000).toFixed(2);
  } else if (value.indexOf("n") !== -1) {
    return (Number(value.replace("n", "")) / 1000000000).toFixed(2);
  } else if (value.indexOf("m") !== -1) {
    return (Number(value.replace("m", "")) / 1000).toFixed(2);
  } else {
    return value;
  }
}

export function miMemoryFormat(value) {
  if (value == null) {
    return "";
  }
  if (value.indexOf("Ki") !== -1) {
    return (Number(value.replace("Ki", "")) / 1024).toFixed(2);
  } else if (value.indexOf("Mi") !== -1) {
    return value.replace("Mi", "");
  } else if (value.indexOf("Gi") !== -1) {
    return Number(value.replace("Gi", "")) * 1000;
  }
}

export function giMemoryFormat(value) {
  if (value == null) {
    return "";
  }
  value = `${value}`.toLowerCase();
  if (value.indexOf("ki") !== -1) {
    return (Number(value.replace("ki", "")) / 1024 / 1024).toFixed(2);
  } else if (value.indexOf("mi") !== -1) {
    return (Number(value.replace("mi", "")) / 1024).toFixed(2);
  } else if (value.indexOf("gi") !== -1) {
    return value.replace("gi", "");
  }
}

export const getCpuUsePercent = (usage: string, capacity: string) => {};

export const getCpuCoresStr = (nano: string | number, digits = 2): string => {
  return `${getCpuCores(nano).toFixed(digits)}`;
};
export const getCpuCores = (nano: string | number): number => {
  /** nCores → 智能单位 */

  if (!nano) return 0;

  const units = ["n", "μ", "m", ""];
  const base = 1000;
  let idx = 0;
  if (typeof nano === "string") {
    if (nano.indexOf("n") !== -1) {
      idx = 0;
      nano = nano.replace("n", "");
    } else if (nano.indexOf("μ") !== -1) {
      idx = 1;
      nano = nano.replace("μ", "");
    } else if (nano.indexOf("m") !== -1) {
      idx = 2;
      nano = nano.replace("m", "");
    }
  }
  let val = Number(nano);

  while (idx < units.length - 1) {
    val /= base;
    idx++;
  }
  return val;
};
